2010-04-28 6 views
0

배경 : ASP.NET 2.0으로 제작되었으며 Windows 호스팅 웹 사이트가 있습니다. 이제 PHP로 내 사이트를 다시 작성하고 Linux 호스팅으로 옮겨야합니다. 나는 오래된 웹 페이지를 직접 가리키는 웹 사이트로부터 들어오는 많은 링크를 가지고있다. 사이트 자체는 매우 간단하고 하나의 동적 페이지와 5 개의 정적 페이지입니다.Htaccess 규칙 .aspx를 .php로 다시 작성

정적 .aspx 페이지를 .php 페이지로 저장하고 PHP에서 동적 페이지를 다시 작성했습니다. 동적 페이지는 City.aspx라고하며 PHP로 작성했으며 City.php라고합니다.

내 이전 Windows 호스팅에서 친숙한 URL에 ASP.NET의 URL 매핑을 사용했습니다. 예를 들어 Laajakaista/Ypaja.aspx에 대한 들어오는 URL 요청은 City.aspx? CityID = 981로 매핑되었습니다.

내 목표 : 기존 .aspx 페이지를 찾는 모든 사람 방문자와 검색 엔진을 새로운 .php 페이지로 리디렉션.

방문자를 새로운 페이지로 리디렉션하는 가장 쉬운 방법은 .aspx 파일에 대한 모든 요청이 .php 파일 형식으로 리디렉션되는 리디렉션을 만드는 것입니다.

누군가 MYSITE/City.aspx? CityID = 5를 요구하면 대신 MYSITE/City.php? CityID = 5로 간주됩니다.

그러나이 문제를 해결하는 데 많은 어려움을 겪고 있습니다.

는 지금까지 내가 발견 한 것입니다 :

rewriterule ^([.]+)\.aspx$ http://www.example.com/$1.php [R=301,L] 

그러나, 나는이 파일 타입 후 매개 변수를 처리 할 수 ​​있다고 생각하고 나는 또한 전면에 넣어 무엇을 아주 확실하지 않다.

<add url="~/Laajakaista/Ypaja.aspx" mappedUrl="~/City.aspx?CityID=981" /> 
    <add url="~/Laajakaista/Aetsa.aspx" mappedUrl="~/City.aspx?CityID=988" /> 
    <add url="~/Laajakaista/Ahtari.aspx" mappedUrl="~/City.aspx?CityID=989" /> 
    <add url="~/Laajakaista/Aanekoski.aspx" mappedUrl="~/City.aspx?CityID=992" /> 

이 같은 간단한 리디렉션을 만들려고 :

내가이 같은 매핑으로 큰 매핑 파일을했다 그래서 내가 친화적 인 URL의 사용 내 이전 사이트에서 물건 좀 더 복잡한을 만들려면 :

Redirect 301 Laajakaista/Aanekoski.aspx City.php?CityID=992 

그러나 작동시키지 못했습니다. 나는 내부 서버 오류와 50k .htaccess 파일로 끝났다 ...

어떤 도움을 주시면 감사하겠습니다.

답변

1

htaccess 파일에서 cityname/ID 변환을 정말로 수행 하시겠습니까?

일반적인 방법은 Laajakaista/*.aspx과 일치시키고 PHP 스크립트에 매개 변수로 장소 이름을 전달하는 것입니다 (그러면 ID로 변환됩니다). 그게 더 좋은 생각이 아니겠습니까? 그 옵션이 경우

, 당신은 이런 짓을 할 것이다 :

rewriterule ^Laajakaista/([.]+)\.aspx$ city.php?cityname=$1 [QSA] 
rewriterule ^([.]+)\.aspx$ $1.php?%{QUERY_STRING} [R=301,QSA] 

당신은 함께 또는없이 301 그렇게 할 수 - 301 브라우저에 표시하는 URL이 변경 될 수 있습니다.

+0

내 문제 2 번을 해결할 수 있습니다. 그러나 여전히 존재하지 않는 .aspx 페이지에 대해 많은 요청을 받고 있습니다. 이제는 비슷한 이름의 .php 페이지로 찾을 수 있습니다. 첫 번째 문제에 대한 아이디어가 있습니까? –

+0

@Markus 그들은 모두 도시 이름과 같은 디렉토리에 있습니까? –

+0

@Markus 만약 같은 디렉토리에 있다면 PHP front controller (예 : city.php 대신 index.php)를 만들고 index.php에서 무엇을 할 지 결정할 수 있습니다 :'cityname.php' 파일이 존재하면 , 그렇지 않다면, 그 이름의 도시를 검색하고, 그것이 실패해도 404를 보내십시오. 너무 우아하지는 않지만, 잠시 동안 SEO 이유로 기존 구조를 보존해야한다면, 할 수있어. rewriterule이 aspx 파일에만 적용되고 이미지와 같은 다른 리소스에는 적용되지 않는 한 성능 측면에서도 괜찮습니다. –

1

QSA를 플래그에 추가하여 시도하십시오 ([R=301,L,QSA]). 이것은 "Query String Append"의 약자이며 이전 URL의 모든 쿼리 문자열을 새 URL에 추가합니다. 이렇게하면 파일 이름 뒤에 매개 변수 문제가 해결됩니다.

RewriteRule ^(.*)\.aspx$ http://www.example.com/$1.php [R=301,L,QSA] 

다른 매핑에 대해서는 사용자의 방법을 다시 생각해 볼 수 있습니다. 각 도시에 대한 매핑이 지저분 해 보입니다. city.php 파일에 매개 변수로 도시 이름을 전달하고 이름에서 ID로 변환해야합니다. 그런 다음 각 도시의 리디렉션이 아니라 .htaccess 파일의 RewriteRule 항목이 하나뿐입니다. 예 :

RewriteRule ^Laajakaista/(.*)\.aspx$ city.php?cityname=$1 [L] 
+0

.aspx 파일을 실행하기 위해 ASP.NET이 없으므로 .aspx 파일로 전달할 수 없습니다. 나는 이제 리눅스 호스트에 있는데, .aspx 결말로 내 도메인에 들어오는 많은 링크가있다. 상황에 대한 나의 지저분한 설명에 대해 사과드립니다. –

+0

죄송합니다, 나는 PHP 파일을 의미했습니다. –

관련 문제