我已经浏览了干净网址上的多个线程,但我仍然对它感到困惑。我想在核心php网站中使用干净网址策略。我为多个网址更改了我的.htaccess文件。但我的以下代码可以正常工作仅限一页(一个网址)
# Turn on the Rewrite Engine
RewriteEngine on
# Rewrite for buyleads.php
RewriteRule ^buyleads buyleads.php [NC,L]
## NC makes the rule non case sensitive
#L makes the last rule that this specific condition match
# Rewrite for search.php?u=xxx
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ search.php?cat=$1 [L]
# Rewrite for search.php?u=xxx&subcat=xxx
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ search.php?cat=$1&subcat=$2 [L]
# Rewrite for detail.php?u=xxx
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^detail/([a-z0-9]+)$ /detail.php?id=$1 [L]
问题1.上面的代码仅适用于search.php,如果我输入www.sitename.com/detail/29(detail.php代码),则其工作方式类似于www.sitename / 29(search.php)。我在其中犯了什么错误
问题2.我也想知道是否真的可以通过.htaccess文件制作这样的所有网址?有没有办法在核心php中创建?
问题3.最后我想知道如何通过.htaccess自动重定向到清理网址,就像单击用户后点击这一点一样,请访问www.sitename.com/34/50。
提前致谢
答案 0 :(得分:3)
关于您的问题:
detail/
开头的网址,因此您的第三条规则将永远不会到达,因为第二条规则会搜索类别detail
和子类别29
(在你的具体例子中)。您可以从第二条规则中排除detail/
,但您也可以更改第二条和第二条规则的顺序,以使其有效。第2点的一个小例子:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?url=$1 [L]
现在所有网址都会被重写,在您的脚本中,您可以在$_GET['url']
答案 1 :(得分:0)
这对于在 Apache 配置(httpd.conf 或 apache2.conf)中使用语言/内容协商以及重写规则的所有页面都是可能的。不需要使用 .htaccess
文件。
在 apache2.conf 文件(或 httpd.conf)中添加 Multiviews
指令、MultiviewsMatch
指令,以及这些重写规则:
<Directory /var/www/html>
Options Indexes FollowSymLinks Multiviews
AllowOverride None
Require all granted
RewriteEngine On
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
<Files "*.php">
MultiviewsMatch Any
</Files>
</Directory>
然后保存文件并重启Apache sudo systemctl restart apache2
当您在 apache2.conf 中声明更多指令时,请为每个指令重复 Multiviews
指令:
<Directory /var/www/html/example.com/>
Options FollowSymLinks Multiviews
AllowOverride All
Require all granted
</Directory>
确保在 apache2.conf 中启用/取消注释 rewrite 和 negotiation 模块:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule negotiation_module mod_negotiation.so