Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 重写规则未按预期工作?_.htaccess - Fatal编程技术网

.htaccess 重写规则未按预期工作?

.htaccess 重写规则未按预期工作?,.htaccess,.htaccess,我有一个带有参数的URL,我希望将其转换为sef URL: 想要: 成为: http://map.tautktiv.com/street/address/abc 或 已尝试使用多个联机工具生成.htaccess规则,但均未对URL产生任何影响,.htaccess文件处于活动状态(试图在其中添加一些胡言乱语,但出现错误500) 以下是我尝试过的规则: 一, 二, 三, 该站点是一个子域,其中文件位于共享托管GoDaddy服务器的子目录中,并且也尝试将这些规则应用于其上方目录中的.htaccess

我有一个带有参数的URL,我希望将其转换为sef URL:

想要:

成为:

http://map.tautktiv.com/street/address/abc

已尝试使用多个联机工具生成
.htaccess
规则,但均未对URL产生任何影响,
.htaccess
文件处于活动状态(试图在其中添加一些胡言乱语,但出现错误500)

以下是我尝试过的规则:

一,

二,

三,

该站点是一个子域,其中文件位于共享托管GoDaddy服务器的子目录中,并且也尝试将这些规则应用于其上方目录中的
.htaccess
,结果相同

根据下面的建议也尝试了这个

Options +FollowSymLinks
RewriteEngine on 

RewriteBase /

RewriteRule ^street/address/(.*)$ street.php?address=$1 [r=301,L]
RewriteRule ^address/(.*)$ street.php?address=$1 [r=301,L]
RewriteRule ^street/address/(.*)$ street.php?address=$1 [r=301,L]
同样的结果,什么也没有发生

尝试从主域直接转到页面,但结果相同:

http://tautktiv.com/map/streets/street.php?address=abc
试试这个:

RewriteEngine on 

RewriteRule ^street/address/(.*)$ street.php?address=$1 [r=301,L]
RewriteRule ^address/(.*)$ street.php?address=$1 [r=301,L]
在您的示例中,您遗漏了重写规则第二行中的
^
$


使用
[r=301,L]
而不是
[L]
告诉浏览器thzis是临时重定向。

第一条规则将把丑陋的URL重定向到漂亮的URL。 第二条规则将在内部将其重定向回,以便用户不会看到丑陋的URL

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# Internally forward /street/address/abc to /street.php?address=abc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^street/address/(.*)/?$ /street.php?address=$1 [NC,L]

# Internally forward /address/abc to /street.php?address=abc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^address/(.*)/?$ /street.php?address=$1 [NC,L]
如果确认规则按预期工作,则可以将其从302更改为301,因为在知道规则按预期工作之前,您不想使用301

.htaccess
应该放在
street.php
所在的文件夹中。

HTTP是US ASCII,因此您的语言可能会失败,它会将其重定向到如下位置:

/街道/地址/%25D7%2590%2520%25D7%2598%25D7%2591%25D7%25A8%25D7%2599%2520%25D7%2599%25D7%25A8%25D7%2595%25D7%25A9%25D7%259C%25D7%2599%25D7%259D%2520%25D7%2599%25A9%25D7%25A8%25D7%25A7%25A9%2590%25D7%259C

您最好将链接改为使用
/street/address/word
,而不是直接使用php文件


这样,您就不需要第一条规则,而且您可以只使用内部重定向,该重定向与此更新配合得很好。

第一条规则乍一看似乎是正确的。第一个块中的第二条规则应该用
^
$
包围,以防止它与
foo/street/address/asdf
匹配。尝试在规则上方添加
RewriteBase/
。请注意,这些都是内部重写,以使
http://example.com/street/address/asdf
显示实际页面。它们不会反过来工作。@buzibuzi你误解了这个方法的工作原理。您应该访问
http://map.tautktiv.com/street/address/abc
将返回
http://map.tautktiv.com/street.php?address=abc
(url没有更改)你是对的……看看Prix的答案,他也解决了这个问题。太棒了!它部分起作用:当您直接转到url:-时,它就起作用了。但是当你点击网站内的链接,或者刷新你已经进入的页面时,它不会重写。例如-尝试上的任何链接-也尝试在加载页面后刷新页面。你知道为什么吗?我试着使用一个“无缓存”的头,并使整个域的网址,但它没有做很多。(顺便说一句,页面是用PHP编写的)thanks@buzibuzi问题是你使用的语言我已经修改了代码来使用它,但是仔细阅读我的答案的底部,看看会发生什么。你的建议很好。但是仍然存在一个问题:如果在“address=”中传递的参数是希伯来语字符串,它不会传递到street.php中的$\u请求变量,那么传递的是英语字符串。这与语言问题有关吗?有办法吗?谢谢你的帮助help@buzibuzi它也不会通过,因为HTTP是US ASCII,它将始终转换类似于阿拉伯语/希伯来语的字符,这样您就不必使用第一条规则,只需使用最后2条规则,并且不必在您的站点上显示带有查询字符串的链接,只需按照第一条规则将链接作为目录即可。例如:<代码>地图>地图>地图。TaTTtktiv.com网站网站网站/地址/地址/代码>正如你们可以看到你们在图像上看到的你们可以看到你们在图像上看到的你们可以看到你们在图像上看到的你们在使用我在图像上的图像上我正在使用的图片上的图片图片上的你们们的图片图片上的图片上的你们们是2009 2009 2009年11月11月14日日的瓦瓦各各各各各各各各各各各各执执执执执教教教教教教教教教教教教教教教教教教教教教教教教教教方方方的图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图们的这这这这这这这这这这名名名名名名名名名名名名名名名名的图图图图图图图图图图图图图嗯。您在代码上的错误是另一个问题。因为我使用PHP获取地址,所以我所要做的就是使用
$\u get['address']
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# add whatever other special conditions you need here

RewriteRule ^/([0-9]+)-(.*)$ /street.php?address=$1 [L]
RewriteRule /(.*)/(.*)/$ street.php?address=$1
Options +FollowSymLinks
RewriteEngine on 

RewriteBase /

RewriteRule ^street/address/(.*)$ street.php?address=$1 [r=301,L]
RewriteRule ^address/(.*)$ street.php?address=$1 [r=301,L]
RewriteRule ^street/address/(.*)$ street.php?address=$1 [r=301,L]
http://tautktiv.com/map/streets/street.php?address=abc
RewriteEngine on 

RewriteRule ^street/address/(.*)$ street.php?address=$1 [r=301,L]
RewriteRule ^address/(.*)$ street.php?address=$1 [r=301,L]
Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# Internally forward /street/address/abc to /street.php?address=abc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^street/address/(.*)/?$ /street.php?address=$1 [NC,L]

# Internally forward /address/abc to /street.php?address=abc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^address/(.*)/?$ /street.php?address=$1 [NC,L]