如何使用.htaccess创建友好的URL?

Jon*_*han 11 php url .htaccess url-rewriting

我正在用.htaccess度过难关.我想为我正在制作的网站创建友好的网址...

基本上我想转换这个:

http://website.com/index.php?ctrl=pelicula&id=0221889
http://website.com/index.php?ctrl=pelicula&id=0160399&tab=posters
Run Code Online (Sandbox Code Playgroud)

进入:

http://website.com/pelicula/0221889/
http://website.com/pelicula/0221889/posters/
Run Code Online (Sandbox Code Playgroud)

如果我以后需要它,我也想知道如何将文章标题添加到URL的末尾(我正在使用PHP):

http://website.com/pelicula/0221889/the-article-name/
http://website.com/pelicula/0221889/the-article-name/posters/
Run Code Online (Sandbox Code Playgroud)

注意:Stackoverflow方法对我也有好处,例如这个问题的网址是:

http://stackoverflow.com/questions/3033407/htacces-to-create-friendly-urls-help-needed
Run Code Online (Sandbox Code Playgroud)

但你可以把任何东西放在id之后,它也会起作用.像这样:

http://stackoverflow.com/questions/3033407/just-anything-i-want
Run Code Online (Sandbox Code Playgroud)

我使用了一些自动Web工具来创建.htacces文件,但它无法正常工作.所以我请求你的帮助.

如果您能推荐.htacces最佳实践和建议,我也将很高兴.

编辑:根据我得到的一些答案,我把这个:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/([^/]+)/([^/]+)/?([^/]*)/?$ index.php?ctrl=$1&id=$2&tab=$3 [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

但我得到默认主机'找不到页'错误.

我也尝试过:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+)/(\d+)/([^/]+)/?$ index.php?ctrl=$1&id=$2&tab=$3 [QSA,L]
    RewriteRule ^([^/]+)/(\d+)/?$         index.php?ctrl=$1&id=$2 [QSA,L]
    RewriteRule ^([^/]+)/?$               index.php?ctrl=$1 [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这也行不通.它将我带到我的默认404.php页面.

mod_rewrite已启用并正常工作.

救命!

Ric*_*uen 7

http://website.com/我的文档根目录中,我放了一个htaccess这样的文件:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

然后在PHP脚本中,您可以随意操作$_GET['url']变量:

$path_components = explode('/', $_GET['url']);
$ctrl=$path_components[0];
$id=$path_components[1];
$tab=$path_components[2];
Run Code Online (Sandbox Code Playgroud)


cam*_*001 7

刚刚在本地进行了测试,似乎可以满足您的需求:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/.]+)(?:/)?$ /index.php?ctrl=$1 [L]
    RewriteRule ^([^/.]+)/([^/.]+)(?:/)?$ /index.php?ctrl=$1&id=$2 [L]
    RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)(?:/.*)?$ /index.php?ctrl=$1&id=$2&tab=$3 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这就是它的作用:

这些重写将使用或不使用尾部斜杠 - 如果您希望它们仅在没有斜杠的情况下工作,请(?:/)?从前两次重写的末尾删除.您还可以使用mod_rewrite根据需要添加或删除尾部斜杠.