Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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
Php URL重写htaccess?_Php_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php URL重写htaccess?

Php URL重写htaccess?,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我正试图重写一些URL,但仍然收到错误消息。 我的网站是PHP开发的。我设法使所有动态URL看起来都是静态的。但对于一个类别,我无法找到适用的正确条件和规则 以下是我要重写的URL类型(它是动态的): 我想要这样的: mywebsite.com/vehicle/id/34556 (mywebsite.com/details/id/34556/vehicle-in england-to-rent) mywebsite.com/vehicle/id/2312 (mywebsite.com/detai

我正试图重写一些URL,但仍然收到错误消息。 我的网站是PHP开发的。我设法使所有动态URL看起来都是静态的。但对于一个类别,我无法找到适用的正确条件和规则

以下是我要重写的URL类型(它是动态的):

我想要这样的:

mywebsite.com/vehicle/id/34556 (mywebsite.com/details/id/34556/vehicle-in england-to-rent)
mywebsite.com/vehicle/id/2312 (mywebsite.com/details/id/2312/new-car-london)
我已经在我的htaccess文件中包含了这个条件,但到目前为止还没有结果。 以下是我使用的代码:

RewriteCond %{HTTP_HOST} ^mywebsite\.com$ [NC]
RewriteRule ^(.*)$ http://www.mywebsite.com/$1 [R=301,L] 

RewriteCond %{REQUEST_URI} ^/details/id/([0-9]+)$ 
RewriteRule ^/vehicle/id/([0-9]+)$ [R=301,NE,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?slug=$1 [L,QSA]
我终于能够在我的web浏览器中看到所需的更改,但编辑代码如下:

RewriteCond %{REQUEST_URI} ^/?details/(.*)$
RewriteRule ^(.*)$ /vehicle/$1 [R=301,L]


浏览器中的url现在按预期显示。然而,该网页是一个404错误页面。我有所需的url,但没有页面。是否要更改条件以使其正常工作?

请尝试以下操作:

# Remove the line: RewriteCond %{REQUEST_URI} ^/details/id/([0-9]+)$ 
RewriteRule ^details/id/([0-9]+)$ /vehicle/id/$1 [R=301,NE,L]

第一部分是要测试的内容(即正则表达式),第二部分是匹配时应重定向到的位置。

请尝试以下操作:

# Remove the line: RewriteCond %{REQUEST_URI} ^/details/id/([0-9]+)$ 
RewriteRule ^details/id/([0-9]+)$ /vehicle/id/$1 [R=301,NE,L]
第一部分是正在测试的内容(即正则表达式),第二部分是匹配时应该重定向到的位置。

很抱歉,返回太晚了。 在检查服务器几个星期后,我终于找到了丢失的东西。 您提供的重写规则几乎是完美的。但是唯一的问题是htaccess将查询重定向到一个新的url,但是由于我没有创建新页面,输出结果是404错误。 因此,为了使事情变得正确,我必须创建一个新的php文件(使用与前面相同的代码)并以不同的方式重命名它(vehicle)。我使用上面提供的代码应用htaccess重定向。 它工作得很好。 谢谢

很抱歉回来晚了。 在检查服务器几个星期后,我终于找到了丢失的东西。 您提供的重写规则几乎是完美的。但是唯一的问题是htaccess将查询重定向到一个新的url,但是由于我没有创建新页面,输出结果是404错误。 因此,为了使事情变得正确,我必须创建一个新的php文件(使用与前面相同的代码)并以不同的方式重命名它(vehicle)。我使用上面提供的代码应用htaccess重定向。 它工作得很好。

谢谢

我不太喜欢Apache的重写规则,但是
RewriteCond%{REQUEST_URI}^/details/id/([0-9]+)$
是否意味着只有在满足该条件的情况下才能应用进一步的规则?那么下面的规则将不会触发,因为它与条件不匹配。@Camil Staps是的,您是对的。但是让规则包含这样的条件也不起作用:“重写规则^(.*)$/vehicle/%1[R=301,L]”。我也不太喜欢Apache的重写规则,但这似乎是一种更简单的方法,因为我并不真的想重写里面的代码。对于正则表达式捕获组,你应该使用
$1
,而不是
%1
重写规则^/vehicle/id/([0-9]+)$[R=301,NE,L]
,这除了可能会出错之外,什么都做不了。你需要说明你写信的目的地
RewriteRule^/vehicle/id/([0-9]+)$/some/other/url[R=301,NE,L]
我不太喜欢Apache的重写规则,但是
RewriteCond%{REQUEST_URI}^/details/id/([0-9]+)$
是否意味着只有在满足条件的情况下才能应用进一步的规则?那么下面的规则将不会触发,因为它与条件不匹配。@Camil Staps是的,您是对的。但是让规则包含这样的条件也不起作用:“重写规则^(.*)$/vehicle/%1[R=301,L]”。我也不太喜欢Apache的重写规则,但这似乎是一种更简单的方法,因为我并不真的想重写里面的代码。对于正则表达式捕获组,你应该使用
$1
,而不是
%1
重写规则^/vehicle/id/([0-9]+)$[R=301,NE,L]
,这除了可能会出错之外,什么都做不了。你需要说明你写信的目的地
RewriteRule^/vehicle/id/([0-9]+)$/some/other/url[R=301,NE,L]
我不太喜欢Apache的重写规则,但是
RewriteCond%{REQUEST_URI}^/details/id/([0-9]+)$
是否意味着只有在满足条件的情况下才能应用进一步的规则?那么下面的规则将不会触发,因为它与条件不匹配。@Camil Staps是的,您是对的。但是让规则包含这样的条件也不起作用:“重写规则^(.*)$/vehicle/%1[R=301,L]”。我也不太喜欢Apache的重写规则,但这似乎是一种更简单的方法,因为我并不真的想重写里面的代码。对于正则表达式捕获组,你应该使用
$1
,而不是
%1
重写规则^/vehicle/id/([0-9]+)$[R=301,NE,L]
,这除了可能会出错之外,什么都做不了。你需要说明你写信的目的地<代码>重写规则^/vehicle/id/([0-9]+)$/some/other/url[R=301,NE,L]谢谢。我试过这样做:[code](RewriteRule^/?details/(.*)$/vehicle/$1[R=301,L])它在浏览器上工作,不幸的是,我得到了一个404错误页面作为输出,这不是我在回答中给出的规则。但是,我已经对它进行了更新,删除了前导斜杠。请使用我的规则,因为它显示(它应该是您的第一个规则之一)。如果您遇到404错误,那么该错误来自何处?是PHP应用程序抛出错误,还是Apache抛出错误?是的,我也尝试了你的代码。url正在更改,但输出只是缺少一个页面。页面不存在。。。也许不应该在这里重写。这就像一个简单的重定向到一个新的url,而不是重写url。不幸的是,你没有什么意义。错误是来自您的脚本还是来自Apache?它必须来自您的应用程序,因为您已将
(.*)
传递到
index.php
。由于以上回答了您的问题,请将其标记为已接受并开始新问题。谢谢。我试过这样做:[code](RewriteRule^/?details/(.*)$/vehicle/$1[R=301,L])它在浏览器上工作,不幸的是,我得到了一个404错误页面作为输出,这不是我在回答中给出的规则。不过,我已将其更新为re
# Remove the line: RewriteCond %{REQUEST_URI} ^/details/id/([0-9]+)$ 
RewriteRule ^details/id/([0-9]+)$ /vehicle/id/$1 [R=301,NE,L]