我正在尝试在我的000webhost
帐户的htaccess文件中写一个rewritrule,但我找不到让它工作的方法!
所有文件都上传到根目录(public_html)。 .htaccess
文件也在同一目录中。
我得到这样的内容:domain.com/index.php?city=London
我需要将其更改为domain.com/city/London
但似乎没有任何工作可以通过htaccess
文件!
这是我的htaccess代码:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^city/([^/]*)$ /index.php?city=$1 [L]
</IfModule>
任何帮助都会很棒。
答案 0 :(得分:0)
你的htaccess工作正常。如果用户将访问页面domain.com/index.php?city=LondonYou
,您可以重定向他。按标题位置。
header("Location: city/".$_GET['city']);
现在你需要知道,什么时候用户访问htacces,什么时候不访问。只是使用一些技巧。
RewriteRule ^city/([^/]*)$ /index.php?city=$1&accessByHtaccess [L]
有条件。
if(!$_GET['accessByHtaccess ']){
header("Location: city/".$_GET['city']);
}
答案 1 :(得分:0)
要获得正确的“漂亮的网址”,你需要将丑陋的网址重定向到漂亮的网址,并在内部重写好的网址,以实现丑陋,实际工作的网址。你已经有了内部重写。
从Apache 2.3.9开始,您可以使用以下解决方案。 END
- 标志在早期版本中不可用,并且在使用时会引发内部服务器错误。将R
更改为R=301
以使重定向成为永久性。只有当所有重定向和重写都按照您的需要工作时才会这样做,因为浏览器会缓存永久重定向。 END标志将完全停止重写,并将阻止无限循环。
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} city=([^&]*)
RewriteRule ^index\.php$ /city/%1? [R,L]
RewriteRule ^city/([^/]*)$ /index.php?city=$1 [END]
在早期版本的Apache中,您需要使用hack。这是有效的,因为%{THE_REQUEST}
仅对外部请求可用,而不是在重写url时:
RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/index\.php\?city=(.*)\s [NC]
RewriteRule ^ city/%1? [R,L]
RewriteRule ^city/([^/]*)$ /index.php?city=$1 [L]
请注意,我无法在此计算机上测试RewriteRule,但我确信我没有输入错字。